package com.agentlab.imitation.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




/**
 * 
 * @author Administrator
 *
 */
public class WebUtil {
	/**
	 * 获取登录员工
	 */
//	public static OrgUsers getSessOrgUsers(HttpServletRequest request){
//		return (OrgUsers) request.getSession().getAttribute("OrgUsers");
//	}
//	public static String getUserPermission(HttpServletRequest request){
//		OrgUsers user =(OrgUsers)request.getSession().getAttribute("userorg");
//		if(user == null){
//			return "nopermission";
//		}
//		return "ok";
//	}
	
	/**
	 * 获取用户角色
	 * @param request
	 * @return
	 */
//	public static String getUserRole(HttpServletRequest request){
//		OrgUsers user =(OrgUsers)request.getSession().getAttribute("userorg");
//		String[] arStr = CommonConstant.ADMIN_USERCODE.split(",");
//		for(String str:arStr){
//			if(str.equals(user.getUid().toString())){
//				return CommonConstant.USER_ROLE_ADMIN;
//			};
//		}
//		return CommonConstant.USER_ROLE_AGENT;
//	}
	/**
	 * 获取登录用户
	 */
//	public static OrgUsers getOrgUsers(HttpServletRequest request){
//		return (OrgUsers) request.getSession().getAttribute("userorg");
//	}
	/**
	 * 删除购物车
	 */
	public static void deleteBuyCart(HttpServletRequest request){
		request.getSession().removeAttribute("buyCart");
	}
    /***
     * 获取URI的路径,如路径为http://www.babasport.com/action/post.htm?method=add, 得到的值为"/action/post.htm"
     * @param request
     * @return
     */
    public static String getRequestURI(HttpServletRequest request){     
        return request.getRequestURI();
    }
    /**
     * 获取完整请求路径(含内容路径及请求参数)
     * @param request
     * @return
     */
    public static String getRequestURIWithParam(HttpServletRequest request){     
        return getRequestURI(request) + (request.getQueryString() == null ? "" : "?"+ request.getQueryString());
    }
    /**
     * 添加cookie
     * @param response
     * @param name cookie的名称
     * @param value cookie的值
     * @param maxAge cookie存放的时间(以秒为单位,假如存放三天,即3*24*60*60; 如果值为0,cookie将随浏览器关闭而清除)
     */
    public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) {        
        Cookie cookie = new Cookie(name, value);
        cookie.setPath("/");
        if (maxAge>0) cookie.setMaxAge(maxAge);
        response.addCookie(cookie);
    }
    
    /**
     * 获取cookie的值
     * @param request
     * @param name cookie的名称
     * @return
     */
    public static String getCookieByName(HttpServletRequest request, String name) {
    	Map<String, Cookie> cookieMap = WebUtil.readCookieMap(request);
        if(cookieMap.containsKey(name)){
            Cookie cookie = (Cookie)cookieMap.get(name);
            return cookie.getValue();
        }else{
            return null;
        }
    }
    
    protected static Map<String, Cookie> readCookieMap(HttpServletRequest request) {
        Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
        Cookie[] cookies = request.getCookies();
        if (null != cookies) {
            for (int i = 0; i < cookies.length; i++) {
                cookieMap.put(cookies[i].getName(), cookies[i]);
            }
        }
        return cookieMap;
    }
    
    
    /**
	 * 验证上传文件类型是否属于图片格式
	 * @return
	 */
	public static boolean validateImageFileType(String formfile,String logoimageContentType){
		if(formfile!=null && formfile.length()>0){
			List<String> arrowType = Arrays.asList("image/bmp","image/png","image/gif","image/jpg","image/jpeg","image/pjpeg");
			List<String> arrowExtension = Arrays.asList("gif","jpg","bmp","png");
			String ext = getExt(formfile);
			return arrowType.contains(logoimageContentType.toLowerCase()) && arrowExtension.contains(ext);
		}
		return true;
	}
	
	public static String getExt(String formfile){
		return formfile.substring(formfile.lastIndexOf('.')+1).toLowerCase();
	}
    /**
     * 去除html代码
     * @param inputString
     * @return
     */
    public static String HtmltoText(String inputString) {
        String htmlStr = inputString; //含html标签的字符串
        String textStr ="";
        java.util.regex.Pattern p_script;
        java.util.regex.Matcher m_script;
        java.util.regex.Pattern p_style;
        java.util.regex.Matcher m_style;
        java.util.regex.Pattern p_html;
        java.util.regex.Matcher m_html;          
        java.util.regex.Pattern p_ba;
        java.util.regex.Matcher m_ba;
        
        try {
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; //定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script> }
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; //定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style> }
            String regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式
            String patternStr = "\\s+";
            
            p_script = Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll(""); //过滤script标签

            p_style = Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll(""); //过滤style标签
         
            p_html = Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll(""); //过滤html标签
            
            p_ba = Pattern.compile(patternStr,Pattern.CASE_INSENSITIVE);
            m_ba = p_ba.matcher(htmlStr);
            htmlStr = m_ba.replaceAll(""); //过滤空格
         
         textStr = htmlStr;
         
        }catch(Exception e) {
                    System.err.println("Html2Text: " + e.getMessage());
        }          
        return textStr;//返回文本字符串
     }
  //取IP地
    public static  String getIpAddr(HttpServletRequest request) {
        String ip = "";
  	   ip = request.getHeader("x-forwarded-for");
  	   if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  		   ip = request.getHeader("Proxy-Client-IP");
  	   }
  	   if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  		   ip = request.getHeader("WL-Proxy-Client-IP");
  	   }
  	   if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  		   ip = request.getRemoteAddr();
  	   }
  	   return ip;
     }
    

    
    /**
     * 从文件名得到文件绝对路径。
     * @param fileName 文件名
     * @return 对应的文件路径
     * @since  0.4
     */
    public static String getFilePath(String fileName) {
      File file = new File(fileName);
      return file.getAbsolutePath();
    }
    /**
     * 将DOS/Windows格式的路径转换为UNIX/Linux格式的路径。
     * 其实就是将路径中的"\"全部换为"/"，因为在某些情况下我们转换为这种方式比较方便，
     * 某中程度上说"/"比"\"更适合作为路径分隔符，而且DOS/Windows也将它当作路径分隔符。
     * @param filePath 转换前的路径
     * @return 转换后的路径
     * @since  0.4
     */
    public static String toUNIXpath(String filePath) {
      return filePath.replace('\\', '/');
    }
    /**
     * 从文件名得到UNIX风格的文件绝对路径。
     * @param fileName 文件名
     * @return 对应的UNIX风格的文件路径
     * @since  0.4
     * @see #toUNIXpath(String filePath) toUNIXpath
     */
    public static String getUNIXfilePath(String fileName) {
      File file = new File(fileName);
      return toUNIXpath(file.getAbsolutePath());
    }
    
    /**
     * 得到文件大小。
     * @param f 文件
     * @return 文件大小
     */
    public static long getFileSizes(File f) {
        long s=0;
        if (f.exists()) {
        	 try {
            FileInputStream fis = null;
			fis = new FileInputStream(f);
            s= fis.available();
        	 } catch (Exception e) {
        		 System.err.println("getFileSizes: " + e.getMessage());
 			}
        } 
        return s;
    }

}
